問(wèn)題描述:
?
Given an integer?n, return the number of trailing zeroes in?n!.
?
Example 1:
?
Input: 3 Output: 0 Explanation:?3! = 6, no trailing zero.
?
Example 2:
?
Input: 5 Output: 1 Explanation:?5! = 120, one trailing zero.
?
Note:?Your solution should be in logarithmic time complexity.
?
思路:
在n!中,若想在結(jié)果的結(jié)尾產(chǎn)生0,只能是5乘以雙數(shù)、或者某個(gè)乘數(shù)結(jié)尾為0,如10,但10可視為5*2,20可以視為5*4.
綜上要想找n!中有幾個(gè)0,其實(shí)就是尋求在1到n這n個(gè)數(shù)中有幾個(gè)5.
其中25=5*5,這需要視為2個(gè)5
代碼目的就變成了尋找1到n這n個(gè)數(shù)中5的個(gè)數(shù)
代碼:
?
def trailingZeroes(self, n: int) -> int: if n <= 0: return 0 return sum( (n//(5**j)) for j in range(1, int(math.log(n, 5)) + 1))
?
n//(5**j) ,當(dāng)j=1時(shí),就是尋找在1到n這n個(gè)數(shù)中有幾個(gè)5
n//(5**j) ,當(dāng)j=2時(shí),就是尋找在1到n這n個(gè)數(shù)中有幾個(gè)25(5*5)(在上一步計(jì)算中,25會(huì)被統(tǒng)計(jì),一次,但由于25是5*5,內(nèi)部含有兩個(gè)5,因而在第二步需要再統(tǒng)計(jì)一次,即一共是算為2次)
依次類推
最后將結(jié)果累計(jì)相加,就可以計(jì)算出就是尋找在1到n這n個(gè)數(shù)中有幾個(gè)5了
?